export default {
	install(Vue) {
		// 创建一个 Vue 实例作为事件总线
		const bus = new Vue();
		// 用于存储事件和对应的订阅回调
		const eventMap = {};

		return {
			// 发布事件
			emit(event, ...args) {
				bus.$emit(event, ...args);
			},
			// 订阅事件，现在可以接受一个事件数组
			on(events, callback) {
				if (Array.isArray(events)) {
					events.forEach((event) => {
						this.subscribe(event, (...args) => {
							callback(event, ...args); // 将事件名称作为第一个参数传递给回调函数
						});
					});
				} else {
					this.subscribe(events, (...args) => {
						callback(...args);
					});
				}
			},
			// 辅助方法，用于订阅单个事件
			subscribe(event, callback) {
				// 要先执行回调要不然不触发
				bus.$on(event, (...args) => {
					callback(...args)
				});
				if (!eventMap[event]) {
					eventMap[event] = [];
				}
				eventMap[event].push(callback);

			},
			// 取消订阅事件，现在也可以接受一个事件数组
			clear(events) {
				if (Array.isArray(events)) {
					events.forEach((event) => {
						this.unsubscribe(event);
					});
				} else {
					this.unsubscribe(events);
				}
			},
			// 辅助方法，用于取消订阅单个事件
			unsubscribe(event) {
				if (eventMap[event]) {
					eventMap[event].forEach(callback => {
						bus.$off(event, callback);
					});
					delete eventMap[event];
				}
			}
		};
	}
};